// 1.优雅降级和渐进增强
// 渐进增强（Progressive Enhancement）：一开始就针对低版本浏览器进行构建页面，完成基本的功能，然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。
// 优雅降级（Graceful Degradation）：一开始就构建站点的完整功能，然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用，然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。
// 其实渐进增强和优雅降级并非什么新概念，只是旧的概念换了一个新的说法。在传统软件开发中，经常会提到向上兼容和向下兼容的概念。渐进增强相当于向上兼容，而优雅降级相当于向下兼容。

// 2.JS哪些操作会造成内存泄露
// （1）意外的全局变量引起的内存泄露。
// function leak(){  
//   leak="xxx";//leak成为一个全局变量，不会被回收  
// }
// （2）闭包引起的内存泄露。
// （3）没有清理的DOM元素引用。
// （4）被遗忘的定时器或者回调 5）子元素存在引起的内存泄露。

// 3.什么是闭包，如何使用它，为什么要使用它？
// 闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中，只有函数内部的子函数才能读取局部变量，因此可以把闭包简单理解成“定义在一个函数内部的函数”。
// 所以，在本质上，闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。它的最大用处有两个，一个是前面提到的可以读取函数内部的变量，另一个就是让这些变量的值始终保持在内存中。
// 使用闭包的注意点：
// · 由于闭包会使得函数中的变量都被保存在内存中，内存消耗很大，所以不能滥用闭包，否则会造成网页的性能问题，在IE中可能导致内存泄露。解决方法是，在退出函数之前，将不使用的局部变量全部删除。
// · 闭包会在父函数外部，改变父函数内部变量的值。所以，如果你把父函数当作对象（object）使用，把闭包当作它的公用方法（Public Method），把内部变量当作它的私有属性（private value），这时一定要小心，不要随便改变父函数内部变量的值。

// 4.请解释一下JavaScript的同源策略。
// 在客户端编程语言中，如javascript和 ActionScript，同源策略是一个很重要的安全理念，它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的，一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域，什么叫不同的域呢？当两个域具有相同的协议, 相同的端口，相同的host，那么我们就可以认为它们是相同的域。同源策略还应该对一些特殊情况做处理，比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的，如果脚本能通过file协议访问到硬盘上其它任意文件，就会出现安全隐患，目前IE8还有这样的隐患。

// 5.浏览器是如何渲染页面的？
// 渲染的流程如下：
// 1.解析HTML文件，创建DOM树。
// 自上而下，遇到任何样式（link、style）与脚本（script）都会阻塞（外部样式不阻塞后续外部脚本的加载）。
// 2.解析CSS。优先级：浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式。
// 3.将CSS与DOM合并，构建渲染树（Render Tree）。
// 4.布局和绘制，重绘（repaint）和重排（reflow）。

// 6.$(document).ready()方法和window.onload有什么区别？
//  (1)、window.onload方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行的。
//  (2)、$(document).ready() 方法可以在DOM载入就绪时就对其进行操纵，并调用执行绑定的函数。


// 7.常用那几种浏览器测试？有哪些内核****(Layout Engine)?
// 1、浏览器：IE，Chrome，FireFox，Safari，Opera。
// 2、内核：Trident，Gecko，Presto，Webkit。

// 8.HTML5 为什么只需要写<!DOCTYPE html> ？
// HTML5不基于 SGML，因此不需要对DTD进行引用，但是需要doctype来规范浏览器的行为（让浏览器按照它们应该的方式来运行）。
// 而HTML4.01基于SGML,所以需要对DTD进行引用，才能告知浏览器文档所使用的文档类型。

// 9.介绍一下你对浏览器内核的理解？
// 主要分成两部分：渲染引擎(layout engineer或Rendering Engine)和JS引擎。
// 1、渲染引擎：负责取得网页的内容（HTML、XML、图像等等）、整理讯息（例如加入CSS等），以及计算网页的显示方式，然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同，所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
// 2、JS引擎则：解析和执行javascript来实现网页的动态效果。
// 最开始渲染引擎和JS引擎并没有区分的很明确，后来JS引擎越来越独立，内核就倾向于只指渲染引擎。

// 10.this对象的理解
// this总是指向函数的直接调用者（而非间接调用者）；
// 如果有new关键字，this指向new出来的那个对象；
// 在事件中，this指向触发这个事件的对象，特殊的是，IE中的attachEvent中的this总是指向全局对象Window。

// 11.new操作符具体干了什么呢****?
// （1）创建一个空对象，并且 this 变量引用该对象，同时还继承了该函数的原型。
// （2）属性和方法被加入到 this 引用的对象中。
// （3）新创建的对象由 this 所引用，并且最后隐式的返回 this 。

// 12.call() 和 ****apply() 的区别和作用？
// apply()函数有两个参数：第一个参数是上下文，第二个参数是参数组成的数组。如果上下文是null，则使用全局对象代替。
// 如：function.apply(this,[1,2,3]);
// call()的第一个参数是上下文，后续是实例传入的参数序列。
// 如：function.call(this,1,2,3);

// 13.你有哪些性能优化的方法？
// （1） 减少http请求次数：CSS Sprites, JS、CSS源码压缩、图片大小控制合适；网页Gzip，CDN托管，data缓存 ，图片服务器。
// （2） 前端模板 JS+数据，减少由于HTML标签导致的带宽浪费，前端用变量保存AJAX请求结果，每次操作本地变量，不用请求，减少请求次数
// （3） 用innerHTML代替DOM操作，减少DOM操作次数，优化javascript性能。
// （4） 当需要设置的样式很多时设置className而不是直接操作style。
// （5） 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
// （6） 避免使用CSS Expression（css表达式)又称Dynamic properties(动态属性)。
// （7） 图片预加载，将样式表放在顶部，将脚本放在底部 加上时间戳。

// 14.哪些常见操作会造成内存泄漏？
// 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
// 垃圾回收器定期扫描对象，并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0（没有其他对象引用过该对象），或对该对象的惟一引用是循环的，那么该对象的内存即可回收。
// setTimeout 的第一个参数使用字符串而非函数的话，会引发内存泄漏。
// 闭包、控制台日志、循环（在两个对象彼此引用且彼此保留时，就会产生一个循环）。

// 15.线程与进程的区别
// 一个程序至少有一个进程,一个进程至少有一个线程。
// 线程的划分尺度小于进程，使得多线程程序的并发性高。
// 另外，进程在执行过程中拥有独立的内存单元，而多个线程共享内存，从而极大地提高了程序的运行效率。
// 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行，必须依存在应用程序中，由应用程序提供多个线程执行控制。
// 从逻辑角度来看，多线程的意义在于一个应用程序中，有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用，来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
